#include <stdio.h>
#include <errno.h>
#ifndef __WIN__
#include <dirent.h>
#endif
#include <string.h>
#ifdef __NETWARE__
#include <screen.h>
#include <proc.h>
#else
#include <sys/types.h>
#ifndef __WIN__
#include <sys/wait.h>
#include <unistd.h>
#else
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
#endif
#endif
#include <ctype.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
#include "my_manage.h"

/*
 Synopsis:
  This function testes a exist file 

Arguments:
  mdata:       path to data
  file_name:   name of file
Output:
  A zero value indicates that file is exist. 
*/
bool test_sys_file(const char *mdata,const char *file_name)
{
  struct stat file;
  char path_file_name[PATH_MAX];
  snprintf(path_file_name, PATH_MAX, "%s/%s", mdata, file_name);
  return(stat(path_file_name,&file));
}

/*
 Synopsis:
  This function creates a file with sql requstes for creating 
  system data files.

Arguments:
  mdata:         path to data
  output_file:   file name for output file
  test:          to create system files with test data
Output:
  A zero value indicates a success. 
*/
bool create_system_files(const char *mdata,const char *output_file, bool test)
{
  FILE *out;

  out = fopen(output_file, "w+");

  if (!out)
    return 1;
  
  if (test_sys_file(mdata,"mysql"))
  {
    fprintf(out,"CREATE DATABASE mysql;\n");
  }

  if (test && test_sys_file(mdata,"test"))
  {
    fprintf(out,"CREATE DATABASE test;\n");
  }

  fprintf(out,"USE mysql;\n");

  if (test_sys_file(mdata,"mysql/db.frm"))
  {
    fprintf(out,
      "CREATE TABLE db ("
      "Host char(60) binary DEFAULT '' NOT NULL,"
      "Db char(64) binary DEFAULT '' NOT NULL,"
      "User char(16) binary DEFAULT '' NOT NULL,"
      "Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "PRIMARY KEY Host (Host,Db,User),"
      "KEY User (User))"
      "engine=MyISAM "
      "CHARACTER SET utf8 COLLATE utf8_bin "
      "comment='Database privileges';\n");

    if (test)
    {
      fprintf(out,"INSERT INTO db VALUES ('%%','test','','Y','Y','Y','Y'"
                  ",'Y','Y','N','Y','Y','Y','Y','Y');\n");
      fprintf(out,"INSERT INTO db VALUES ('%%','test\\_%%','','Y','Y','Y'"
                  ",'Y','Y','Y','N','Y','Y','Y','Y','Y');\n");
    }
  }

  if (test_sys_file(mdata,"mysql/host.frm"))
  {
    fprintf(out,
      "CREATE TABLE host ("
      "Host char(60) binary DEFAULT '' NOT NULL,"
      "Db char(64) binary DEFAULT '' NOT NULL,"
      "Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "PRIMARY KEY Host (Host,Db))"
      "engine=MyISAM "
      "CHARACTER SET utf8 COLLATE utf8_bin "
      "comment='Host privileges;  Merged with database privileges';\n");
  }


  if (test_sys_file(mdata,"mysql/user.frm"))
  {
#ifdef __WIN__
    WSADATA wsa_data;
#endif
    char hostname[FN_REFLEN];

#ifdef __WIN__
    if (WSAStartup(MAKEWORD( 2, 2 ),&wsa_data))
      return 1;
#endif
    if (gethostname(hostname, FN_REFLEN))
      return 1;
#ifdef __WIN__
    WSACleanup( );
#endif

    if (strchr(hostname, '.') == NULL)
      strcat(hostname, "%");  

    fprintf(out,
      "CREATE TABLE user ("
      "Host char(60) binary DEFAULT '' NOT NULL,"
      "User char(16) binary DEFAULT '' NOT NULL,"
      "Password char(41) binary DEFAULT '' NOT NULL,"
      "Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
      "ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
      "ssl_cipher BLOB NOT NULL,"
      "x509_issuer BLOB NOT NULL,"
      "x509_subject BLOB NOT NULL,"
      "max_questions int(11) unsigned DEFAULT 0  NOT NULL,"
      "max_updates int(11) unsigned DEFAULT 0  NOT NULL,"
      "max_connections int(11) unsigned DEFAULT 0  NOT NULL,"
      "PRIMARY KEY Host (Host,User)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 COLLATE utf8_bin "
      "comment='Users and global privileges';\n");


    if (test)
    {
      fprintf(out,
        "INSERT INTO user VALUES ('localhost','root',''"
        ",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'"
        ",'Y','Y','Y','Y','Y','','','','',0,0,0);\n");
      fprintf(out,
        "INSERT INTO user VALUES ('%s','root','','Y','Y',"
        "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',"
        "'Y','Y','Y','Y','','','','',0,0,0);\n",hostname);
      fprintf(out,
        "REPLACE INTO user VALUES ('127.0.0.1','root','',"
        "'Y','Y','Y','Y','Y','Y',"
        "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'"
        ",'Y','','','','',0,0,0);\n");
      fprintf(out,"INSERT INTO user (host,user) values ('localhost','');\n");
      fprintf(out,"INSERT INTO user (host,user) values ('%s','');\n",hostname);
    }
    else
    {
      fprintf(out,
        "INSERT INTO user VALUES ('localhost','root','',"
        "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',"
        "'Y','Y','Y','Y','','','','',0,0,0);\n");
#ifndef __WIN__    
      fprintf(out,
        "INSERT INTO user VALUES ('%s','root','','Y','Y',"
        "'Y','Y','Y','Y','Y','Y'"
        "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','',''"
        ",'','',0,0,0);\n",hostname);
      fprintf(out,"INSERT INTO user (host,user) values ('%s','');\n",hostname);
      fprintf(out,"INSERT INTO user (host,user) values ('localhost','');\n");
#else
      fprintf(out,
        "INSERT INTO user VALUES ('localhost','','','Y','Y','Y'"
        ",'Y','Y','Y','Y','Y','Y'"
        ",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','',"
        "'','',0,0,0);\n");
#endif
    }
  }
  
  
  if (test_sys_file(mdata,"mysql/func.frm"))
  {
    fprintf(out,
      "CREATE TABLE func ("
      "name char(64) binary DEFAULT '' NOT NULL,"
      "ret tinyint(1) DEFAULT '0' NOT NULL,"
      "dl char(128) DEFAULT '' NOT NULL,"
      "type enum ('function','aggregate') NOT NULL,"
      "PRIMARY KEY (name)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 COLLATE utf8_bin "
      "comment='User defined functions';\n");
  }

  if (test_sys_file(mdata,"mysql/tables_priv.frm"))
  {
    fprintf(out,
      "CREATE TABLE tables_priv ("
      "Host char(60) binary DEFAULT '' NOT NULL,"
      "Db char(64) binary DEFAULT '' NOT NULL,"
      "User char(16) binary DEFAULT '' NOT NULL,"
      "Table_name char(64) binary DEFAULT '' NOT NULL,"
      "Grantor char(77) DEFAULT '' NOT NULL,"
      "Timestamp timestamp(14),"
      "Table_priv set('Select','Insert','Update','Delete',"
      "'Create','Drop','Grant','References','Index','Alter')"
      " DEFAULT '' NOT NULL,"
      "Column_priv set('Select','Insert','Update','References')"
      "  DEFAULT '' NOT NULL,"
      "PRIMARY KEY (Host,Db,User,Table_name),"
      "KEY Grantor (Grantor)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 COLLATE utf8_bin "
      "comment='Table privileges';\n");
  }

  if (test_sys_file(mdata,"mysql/columns_priv.frm"))
  {
    fprintf(out,
      "CREATE TABLE columns_priv ("
      "Host char(60) binary DEFAULT '' NOT NULL,"
      "Db char(64) binary DEFAULT '' NOT NULL,"
      "User char(16) binary DEFAULT '' NOT NULL,"
      "Table_name char(64) binary DEFAULT '' NOT NULL,"
      "Column_name char(64) binary DEFAULT '' NOT NULL,"
      "Timestamp timestamp(14),"
      "Column_priv set('Select','Insert','Update','References')"
      " DEFAULT '' NOT NULL,"
      "PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 COLLATE utf8_bin "
      "comment='Column privileges';\n");
  }

  if (test_sys_file(mdata,"mysql/help_topic.frm"))
  {
    fprintf(out,
      "CREATE TABLE help_topic ("
      "help_topic_id    int unsigned not null,"
      "name             varchar(64) not null,"
      "help_category_id smallint unsigned not null,"
      "description      text not null,"
      "example          text not null,"
      "url              varchar(128) not null,"
      "primary key      (help_topic_id),"
      "unique index     (name)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 "
      "comment='help topics';\n");
  }

  if (test_sys_file(mdata,"mysql/help_category.frm"))
  {
    fprintf(out,
      "CREATE TABLE help_category ("
      "help_category_id   smallint unsigned not null,"
      "name               varchar(64) not null,"
      "parent_category_id smallint unsigned null,"
      "url                varchar(128) not null,"
      "primary key        (help_category_id),"
      "unique index       (name)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 "
      "comment='help categories';\n");
  }

  if (test_sys_file(mdata,"mysql/help_keyword.frm"))
  {
    fprintf(out,
      "CREATE TABLE help_keyword ("
      "help_keyword_id  int unsigned not null,"
      "name             varchar(64) not null,"
      "primary key      (help_keyword_id),"
      "unique index     (name)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 "
      "comment='help keywords';\n");
  }
				    
  if (test_sys_file(mdata,"mysql/help_relation.frm"))
  {
    fprintf(out,
      "CREATE TABLE help_relation ("
      "help_topic_id int unsigned not null references help_topic,"
      "help_keyword_id int unsigned not null references help_keyword,"
      "primary key      (help_keyword_id, help_topic_id)"
      ") engine=MyISAM "
      "CHARACTER SET utf8 "
      "comment='keyword-topic relation';\n");
  }

  if (test_sys_file(mdata,"mysql/time_zone_name.frm"))
  {
    fprintf(out,
      "CREATE TABLE time_zone_name ("
      "Name char(64) NOT NULL,"
      "Time_zone_id int unsigned NOT NULL,"
      "PRIMARY KEY Name (Name)"
      ") engine=MyISAM CHARACTER SET utf8 "
      "comment='Time zone names';\n");
  
    if (test)
    {
      fprintf(out,
        "INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES"
        "('MET', 1), ('UTC', 2), ('Universal', 2), "
        "('Europe/Moscow',3), ('leap/Europe/Moscow',4),"
        "('Japan', 5);\n");

    }
  }


  if (test_sys_file(mdata,"mysql/time_zone.frm"))
  {
    fprintf(out,
      "CREATE TABLE time_zone ("
      "Time_zone_id int unsigned NOT NULL auto_increment,"
      "Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
      "PRIMARY KEY TzId (Time_zone_id)"
      ") engine=MyISAM CHARACTER SET utf8 "
      "comment='Time zones';\n");
  
    if (test)
    {
      fprintf(out,"INSERT INTO time_zone (Time_zone_id, Use_leap_seconds)"
                  "VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y'), (5,'N');\n");
    }
  }

  if (test_sys_file(mdata,"mysql/time_zone_transition.frm"))
  {
    fprintf(out,
      "CREATE TABLE time_zone_transition ("
      "Time_zone_id int unsigned NOT NULL,"
      "Transition_time bigint signed NOT NULL,"
      "Transition_type_id int unsigned NOT NULL,"
      "PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
      ") engine=MyISAM CHARACTER SET utf8 "
      "comment='Time zone transitions';\n");
  
    if (test)
    {
      fprintf(out,
       "INSERT INTO time_zone_transition"
       "(Time_zone_id, Transition_time, Transition_type_id)"
       "VALUES"
       " (1, -1693706400, 0) ,(1, -1680483600, 1)"
       ",(1, -1663455600, 2) ,(1, -1650150000, 3)"
       ",(1, -1632006000, 2) ,(1, -1618700400, 3)"
       ",(1, -938905200, 2) ,(1, -857257200, 3)"
       ",(1, -844556400, 2) ,(1, -828226800, 3)"
       ",(1, -812502000, 2) ,(1, -796777200, 3)"
       ",(1, 228877200, 2) ,(1, 243997200, 3)"
       ",(1, 260326800, 2) ,(1, 276051600, 3)"
       ",(1, 291776400, 2) ,(1, 307501200, 3)"
       ",(1, 323830800, 2) ,(1, 338950800, 3)"
       ",(1, 354675600, 2) ,(1, 370400400, 3)"
       ",(1, 386125200, 2) ,(1, 401850000, 3)"
       ",(1, 417574800, 2) ,(1, 433299600, 3)"
       ",(1, 449024400, 2) ,(1, 465354000, 3)"
       ",(1, 481078800, 2) ,(1, 496803600, 3)"
       ",(1, 512528400, 2) ,(1, 528253200, 3)"
       ",(1, 543978000, 2) ,(1, 559702800, 3)"
       ",(1, 575427600, 2) ,(1, 591152400, 3)"
       ",(1, 606877200, 2) ,(1, 622602000, 3)"
       ",(1, 638326800, 2) ,(1, 654656400, 3)"
       ",(1, 670381200, 2) ,(1, 686106000, 3)"
       ",(1, 701830800, 2) ,(1, 717555600, 3)"
       ",(1, 733280400, 2) ,(1, 749005200, 3)"
       ",(1, 764730000, 2) ,(1, 780454800, 3)"
       ",(1, 796179600, 2) ,(1, 811904400, 3)"
       ",(1, 828234000, 2) ,(1, 846378000, 3)"
       ",(1, 859683600, 2) ,(1, 877827600, 3)"
       ",(1, 891133200, 2) ,(1, 909277200, 3)"
       ",(1, 922582800, 2) ,(1, 941331600, 3)"
       ",(1, 954032400, 2) ,(1, 972781200, 3)"
       ",(1, 985482000, 2) ,(1, 1004230800, 3)"
       ",(1, 1017536400, 2) ,(1, 1035680400, 3)"
       ",(1, 1048986000, 2) ,(1, 1067130000, 3)"
       ",(1, 1080435600, 2) ,(1, 1099184400, 3)"
       ",(1, 1111885200, 2) ,(1, 1130634000, 3)"
       ",(1, 1143334800, 2) ,(1, 1162083600, 3)"
       ",(1, 1174784400, 2) ,(1, 1193533200, 3)"
       ",(1, 1206838800, 2) ,(1, 1224982800, 3)"
       ",(1, 1238288400, 2) ,(1, 1256432400, 3)"
       ",(1, 1269738000, 2) ,(1, 1288486800, 3)"
       ",(1, 1301187600, 2) ,(1, 1319936400, 3)"
       ",(1, 1332637200, 2) ,(1, 1351386000, 3)"
       ",(1, 1364691600, 2) ,(1, 1382835600, 3)"
       ",(1, 1396141200, 2) ,(1, 1414285200, 3)"
       ",(1, 1427590800, 2) ,(1, 1445734800, 3)"
       ",(1, 1459040400, 2) ,(1, 1477789200, 3)"
       ",(1, 1490490000, 2) ,(1, 1509238800, 3)"
       ",(1, 1521939600, 2) ,(1, 1540688400, 3)"
       ",(1, 1553994000, 2) ,(1, 1572138000, 3)"
       ",(1, 1585443600, 2) ,(1, 1603587600, 3)"
       ",(1, 1616893200, 2) ,(1, 1635642000, 3)"
       ",(1, 1648342800, 2) ,(1, 1667091600, 3)"
       ",(1, 1679792400, 2) ,(1, 1698541200, 3)"
       ",(1, 1711846800, 2) ,(1, 1729990800, 3)"
       ",(1, 1743296400, 2) ,(1, 1761440400, 3)"
       ",(1, 1774746000, 2) ,(1, 1792890000, 3)"
       ",(1, 1806195600, 2) ,(1, 1824944400, 3)"
       ",(1, 1837645200, 2) ,(1, 1856394000, 3)"
       ",(1, 1869094800, 2) ,(1, 1887843600, 3)"
       ",(1, 1901149200, 2) ,(1, 1919293200, 3)"
       ",(1, 1932598800, 2) ,(1, 1950742800, 3)"
       ",(1, 1964048400, 2) ,(1, 1982797200, 3)"
       ",(1, 1995498000, 2) ,(1, 2014246800, 3)"
       ",(1, 2026947600, 2) ,(1, 2045696400, 3)"
       ",(1, 2058397200, 2) ,(1, 2077146000, 3)"
       ",(1, 2090451600, 2) ,(1, 2108595600, 3)"
       ",(1, 2121901200, 2) ,(1, 2140045200, 3)"
       ",(3, -1688265000, 2) ,(3, -1656819048, 1)"
       ",(3, -1641353448, 2) ,(3, -1627965048, 3)"
       ",(3, -1618716648, 1) ,(3, -1596429048, 3)"
       ",(3, -1593829848, 5) ,(3, -1589860800, 4)"
       ",(3, -1542427200, 5) ,(3, -1539493200, 6)"
       ",(3, -1525323600, 5) ,(3, -1522728000, 4)"
       ",(3, -1491188400, 7) ,(3, -1247536800, 4)"
       ",(3, 354920400, 5) ,(3, 370728000, 4)"
       ",(3, 386456400, 5) ,(3, 402264000, 4)"
       ",(3, 417992400, 5) ,(3, 433800000, 4)"
       ",(3, 449614800, 5) ,(3, 465346800, 8)"
       ",(3, 481071600, 9) ,(3, 496796400, 8)"
       ",(3, 512521200, 9) ,(3, 528246000, 8)"
       ",(3, 543970800, 9) ,(3, 559695600, 8)"
       ",(3, 575420400, 9) ,(3, 591145200, 8)"
       ",(3, 606870000, 9) ,(3, 622594800, 8)"
       ",(3, 638319600, 9) ,(3, 654649200, 8)"
       ",(3, 670374000, 10) ,(3, 686102400, 11)"
       ",(3, 695779200, 8) ,(3, 701812800, 5)"
       ",(3, 717534000, 4) ,(3, 733273200, 9)"
       ",(3, 748998000, 8) ,(3, 764722800, 9)"
       ",(3, 780447600, 8) ,(3, 796172400, 9)"
       ",(3, 811897200, 8) ,(3, 828226800, 9)"
       ",(3, 846370800, 8) ,(3, 859676400, 9)"
       ",(3, 877820400, 8) ,(3, 891126000, 9)"
       ",(3, 909270000, 8) ,(3, 922575600, 9)"
       ",(3, 941324400, 8) ,(3, 954025200, 9)"
       ",(3, 972774000, 8) ,(3, 985474800, 9)"
       ",(3, 1004223600, 8) ,(3, 1017529200, 9)"
       ",(3, 1035673200, 8) ,(3, 1048978800, 9)"
       ",(3, 1067122800, 8) ,(3, 1080428400, 9)"
       ",(3, 1099177200, 8) ,(3, 1111878000, 9)"
       ",(3, 1130626800, 8) ,(3, 1143327600, 9)"
       ",(3, 1162076400, 8) ,(3, 1174777200, 9)"
       ",(3, 1193526000, 8) ,(3, 1206831600, 9)"
       ",(3, 1224975600, 8) ,(3, 1238281200, 9)"
       ",(3, 1256425200, 8) ,(3, 1269730800, 9)"
       ",(3, 1288479600, 8) ,(3, 1301180400, 9)"
       ",(3, 1319929200, 8) ,(3, 1332630000, 9)"
       ",(3, 1351378800, 8) ,(3, 1364684400, 9)"
       ",(3, 1382828400, 8) ,(3, 1396134000, 9)"
       ",(3, 1414278000, 8) ,(3, 1427583600, 9)"
       ",(3, 1445727600, 8) ,(3, 1459033200, 9)"
       ",(3, 1477782000, 8) ,(3, 1490482800, 9)"
       ",(3, 1509231600, 8) ,(3, 1521932400, 9)"
       ",(3, 1540681200, 8) ,(3, 1553986800, 9)"
       ",(3, 1572130800, 8) ,(3, 1585436400, 9)"
       ",(3, 1603580400, 8) ,(3, 1616886000, 9)"
       ",(3, 1635634800, 8) ,(3, 1648335600, 9)"
       ",(3, 1667084400, 8) ,(3, 1679785200, 9)"
       ",(3, 1698534000, 8) ,(3, 1711839600, 9)"
       ",(3, 1729983600, 8) ,(3, 1743289200, 9)"
       ",(3, 1761433200, 8) ,(3, 1774738800, 9)"
       ",(3, 1792882800, 8) ,(3, 1806188400, 9)"
       ",(3, 1824937200, 8) ,(3, 1837638000, 9)"
       ",(3, 1856386800, 8) ,(3, 1869087600, 9)"
       ",(3, 1887836400, 8) ,(3, 1901142000, 9)"
       ",(3, 1919286000, 8) ,(3, 1932591600, 9)"
       ",(3, 1950735600, 8) ,(3, 1964041200, 9)"
       ",(3, 1982790000, 8) ,(3, 1995490800, 9)"
       ",(3, 2014239600, 8) ,(3, 2026940400, 9)"
       ",(3, 2045689200, 8) ,(3, 2058390000, 9)"
       ",(3, 2077138800, 8) ,(3, 2090444400, 9)"
       ",(3, 2108588400, 8) ,(3, 2121894000, 9)"
       ",(3, 2140038000, 8)"
       ",(4, -1688265000, 2) ,(4, -1656819048, 1)"
       ",(4, -1641353448, 2) ,(4, -1627965048, 3)"
       ",(4, -1618716648, 1) ,(4, -1596429048, 3)"
       ",(4, -1593829848, 5) ,(4, -1589860800, 4)"
       ",(4, -1542427200, 5) ,(4, -1539493200, 6)"
       ",(4, -1525323600, 5) ,(4, -1522728000, 4)"
       ",(4, -1491188400, 7) ,(4, -1247536800, 4)"
       ",(4, 354920409, 5) ,(4, 370728010, 4)"
       ",(4, 386456410, 5) ,(4, 402264011, 4)"
       ",(4, 417992411, 5) ,(4, 433800012, 4)"
       ",(4, 449614812, 5) ,(4, 465346812, 8)"
       ",(4, 481071612, 9) ,(4, 496796413, 8)"
       ",(4, 512521213, 9) ,(4, 528246013, 8)"
       ",(4, 543970813, 9) ,(4, 559695613, 8)"
       ",(4, 575420414, 9) ,(4, 591145214, 8)"
       ",(4, 606870014, 9) ,(4, 622594814, 8)"
       ",(4, 638319615, 9) ,(4, 654649215, 8)"
       ",(4, 670374016, 10) ,(4, 686102416, 11)"
       ",(4, 695779216, 8) ,(4, 701812816, 5)"
       ",(4, 717534017, 4) ,(4, 733273217, 9)"
       ",(4, 748998018, 8) ,(4, 764722818, 9)"
       ",(4, 780447619, 8) ,(4, 796172419, 9)"
       ",(4, 811897219, 8) ,(4, 828226820, 9)"
       ",(4, 846370820, 8) ,(4, 859676420, 9)"
       ",(4, 877820421, 8) ,(4, 891126021, 9)"
       ",(4, 909270021, 8) ,(4, 922575622, 9)"
       ",(4, 941324422, 8) ,(4, 954025222, 9)"
       ",(4, 972774022, 8) ,(4, 985474822, 9)"
       ",(4, 1004223622, 8) ,(4, 1017529222, 9)"
       ",(4, 1035673222, 8) ,(4, 1048978822, 9)"
       ",(4, 1067122822, 8) ,(4, 1080428422, 9)"
       ",(4, 1099177222, 8) ,(4, 1111878022, 9)"
       ",(4, 1130626822, 8) ,(4, 1143327622, 9)"
       ",(4, 1162076422, 8) ,(4, 1174777222, 9)"
       ",(4, 1193526022, 8) ,(4, 1206831622, 9)"
       ",(4, 1224975622, 8) ,(4, 1238281222, 9)"
       ",(4, 1256425222, 8) ,(4, 1269730822, 9)"
       ",(4, 1288479622, 8) ,(4, 1301180422, 9)"
       ",(4, 1319929222, 8) ,(4, 1332630022, 9)"
       ",(4, 1351378822, 8) ,(4, 1364684422, 9)"
       ",(4, 1382828422, 8) ,(4, 1396134022, 9)"
       ",(4, 1414278022, 8) ,(4, 1427583622, 9)"
       ",(4, 1445727622, 8) ,(4, 1459033222, 9)"
       ",(4, 1477782022, 8) ,(4, 1490482822, 9)"
       ",(4, 1509231622, 8) ,(4, 1521932422, 9)"
       ",(4, 1540681222, 8) ,(4, 1553986822, 9)"
       ",(4, 1572130822, 8) ,(4, 1585436422, 9)"
       ",(4, 1603580422, 8) ,(4, 1616886022, 9)"
       ",(4, 1635634822, 8) ,(4, 1648335622, 9)"
       ",(4, 1667084422, 8) ,(4, 1679785222, 9)"
       ",(4, 1698534022, 8) ,(4, 1711839622, 9)"
       ",(4, 1729983622, 8) ,(4, 1743289222, 9)"
       ",(4, 1761433222, 8) ,(4, 1774738822, 9)"
       ",(4, 1792882822, 8) ,(4, 1806188422, 9)"
       ",(4, 1824937222, 8) ,(4, 1837638022, 9)"
       ",(4, 1856386822, 8) ,(4, 1869087622, 9)"
       ",(4, 1887836422, 8) ,(4, 1901142022, 9)"
       ",(4, 1919286022, 8) ,(4, 1932591622, 9)"
       ",(4, 1950735622, 8) ,(4, 1964041222, 9)"
       ",(4, 1982790022, 8) ,(4, 1995490822, 9)"
       ",(4, 2014239622, 8) ,(4, 2026940422, 9)"
       ",(4, 2045689222, 8) ,(4, 2058390022, 9)"
       ",(4, 2077138822, 8) ,(4, 2090444422, 9)"
       ",(4, 2108588422, 8) ,(4, 2121894022, 9)"
       ",(4, 2140038022, 8), (5, -1009875600, 1);\n");
       
       
    }
  }

  if (test_sys_file(mdata,"mysql/time_zone_transition_type.frm"))
  {
    fprintf(out,
      "CREATE TABLE time_zone_transition_type ("
      "Time_zone_id int unsigned NOT NULL,"
      "Transition_type_id int unsigned NOT NULL,"
      "Offset int signed DEFAULT 0 NOT NULL,"
      "Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
      "Abbreviation char(8) DEFAULT '' NOT NULL,"
      "PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
      ") engine=MyISAM CHARACTER SET utf8 "
      "comment='Time zone transition types';\n");
  
    if (test)
    {
      fprintf(out,
        "INSERT INTO time_zone_transition_type (Time_zone_id,"
        "Transition_type_id, Offset, Is_DST, Abbreviation) VALUES"
        "(1, 0, 7200, 1, 'MEST') ,(1, 1, 3600, 0, 'MET')"
        ",(1, 2, 7200, 1, 'MEST') ,(1, 3, 3600, 0, 'MET')"
        ",(2, 0, 0, 0, 'UTC')"
        ",(3, 0, 9000, 0, 'MMT') ,(3, 1, 12648, 1, 'MST')"
        ",(3, 2, 9048, 0, 'MMT') ,(3, 3, 16248, 1, 'MDST')"
        ",(3, 4, 10800, 0, 'MSK') ,(3, 5, 14400, 1, 'MSD')"
        ",(3, 6, 18000, 1, 'MSD') ,(3, 7, 7200, 0, 'EET')"
        ",(3, 8, 10800, 0, 'MSK') ,(3, 9, 14400, 1, 'MSD')"
        ",(3, 10, 10800, 1, 'EEST') ,(3, 11, 7200, 0, 'EET')"
        ",(4, 0, 9000, 0, 'MMT') ,(4, 1, 12648, 1, 'MST')"
        ",(4, 2, 9048, 0, 'MMT') ,(4, 3, 16248, 1, 'MDST')"
        ",(4, 4, 10800, 0, 'MSK') ,(4, 5, 14400, 1, 'MSD')"
        ",(4, 6, 18000, 1, 'MSD') ,(4, 7, 7200, 0, 'EET')"
        ",(4, 8, 10800, 0, 'MSK') ,(4, 9, 14400, 1, 'MSD')"
        ",(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET')"
        ",(5, 0, 32400, 0, 'CJT') ,(5, 1, 32400, 0, 'JST');\n");
	
    }
  }

  if (test_sys_file(mdata,"mysql/time_zone_leap_second.frm"))
  {
    fprintf(out,
      "CREATE TABLE time_zone_leap_second ("
      "Transition_time bigint signed NOT NULL,"
      "Correction int signed NOT NULL,"
      "PRIMARY KEY TranTime (Transition_time)"
      ") engine=MyISAM CHARACTER SET utf8 "
      "comment='Leap seconds information for time zones';\n");
  
    if (test)
    {
      fprintf(out,
        "INSERT INTO time_zone_leap_second "
        "(Transition_time, Correction) VALUES "
        "(78796800, 1) ,(94694401, 2) ,(126230402, 3)"
        ",(157766403, 4) ,(189302404, 5) ,(220924805, 6)"
        ",(252460806, 7) ,(283996807, 8) ,(315532808, 9)"
        ",(362793609, 10) ,(394329610, 11) ,(425865611, 12)"
        ",(489024012, 13) ,(567993613, 14) ,(631152014, 15)"
        ",(662688015, 16) ,(709948816, 17) ,(741484817, 18)"
        ",(773020818, 19) ,(820454419, 20) ,(867715220, 21)"
        ",(915148821, 22);\n");
    }
  }

  return fclose(out);
}
